/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo.dominio.tablasHash;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import model.dominio.listasSimples.ListaSimple;
import model.dominio.listasSimples.NodosLista;

/**
 *
 * @author Gustavo Canul, Noe Cob, Arandi López
 */
public class TablasHash {

    /**
     *
     * @param rutaArchivoOrigen
     */
    public TablasHash(String rutaArchivoOrigen) {
        this.rutaOrigen = rutaArchivoOrigen;
    }

    /**
     * constructor 
     */
    public TablasHash() {
    }

    /**
     * Metod que obtiene la ruta 
     * @return rutaOrrigen 
     */
    public String getRutaOrigen() {
        return rutaOrigen;
    }

    /**
     * Metodo pone la ruta de origen 
     * @param rutaOrigen
     */
    public void setRutaOrigen(String rutaOrigen) {
       this.rutaOrigen = rutaOrigen;
    }
/**
 * Metodo que obtiene las frecuencias
 * @throws IOException 
 */
    private void obtenerFrecuencia() throws IOException {
        FileReader archivoLectura = null;
        String lineaLectura = "";
        try {
            archivoLectura = new FileReader(rutaOrigen);
            BufferedReader bufferLectura = new BufferedReader(archivoLectura);
            lineaLectura = bufferLectura.readLine();
            while (lineaLectura != null) {
                for (int i = 0; i < lineaLectura.length(); i++) {
                    Character caracter = lineaLectura.charAt(i);
                    frecuencia = hash[caracter.hashCode()];
                    hash[caracter.hashCode()] = frecuencia + 1;
                    numeroDatos++;
                }
                lineaLectura = bufferLectura.readLine();
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(TablasHash.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            archivoLectura.close();
        }
    }

    /**
     * Metodo que obtiene la lista de frecuencia 
     * @return @throws IOException
     */
    public ListaSimple obtenerListaFrecuencias() throws IOException {
        obtenerFrecuencia();
        int frecuenciaLista;

        char letraLista;
        for (int i = 0; i < tamaño; i++) {
            if (hash[i] > 0) {
                letraLista = (char) i;
                frecuenciaLista = hash[i];
                nodos = new NodosLista(frecuenciaLista, letraLista);
                lista.insertarOrden(nodos.obtenerDato(), letraLista);
            }
        }
        return lista;
    }
    
    
    /**
     *
     * @return numeroDatos 
     */
    public int getNumeroDatos() {
        return numeroDatos;
    }
    private char letra;
    private int frecuencia;
    private static final int tamaño = 256;
    int hash[] = new int[tamaño];
    private String rutaOrigen;
    static NodosLista nodos;
    static ListaSimple lista = new ListaSimple();
    private int numeroDatos = 0;
}
